package cryptography.symmetric.TripleDES;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.security.MessageDigest;
import java.security.spec.KeySpec;
import java.util.Arrays;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;


public class TripleDESCryptography1 {

//	public static String encrypt(String value, SecretKey key, IvParameterSpec iv) {
//		try {
//			Cipher ecipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
//			ecipher.init(Cipher.ENCRYPT_MODE, key, iv);
//
//			if (value == null)
//				return null;
//
//			// Encode the string into bytes using utf-8
//			byte[] utf8 = value.getBytes("UTF8");
//
//			// Encrypt
//			byte[] enc = ecipher.doFinal(utf8);
//
//			// Encode bytes to base64 to get a string
//			return new String(Base64.encode(enc), "UTF-8");
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return null;
//	}
//
//	public static String decrypt(String value, SecretKey key, IvParameterSpec iv) {
//		try {
//			Cipher dcipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
//			dcipher.init(Cipher.DECRYPT_MODE, key, iv);
//
//			if (value == null)
//				return null;
//
//			// Decode base64 to get bytes
//			byte[] dec = Base64.decode(value.getBytes());
//
//			// Decrypt
//			byte[] utf8 = dcipher.doFinal(dec);
//
//			// Decode using utf-8
//			return new String(utf8, "UTF8");
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return null;
//	}
//
//	public static void main(String[] args) throws Exception {
//
//		try {
//
//			String text = "My text";
//
//			String keyString = "mypassword";
//			String ivString = "12345678";
//
//			final MessageDigest md = MessageDigest.getInstance("md5");
//			final byte[] digestOfPassword = md.digest(Base64.decode(keyString
//					.getBytes("utf-8")));
//			final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
//			for (int j = 0, k = 16; j < 8;) {
//				keyBytes[k++] = keyBytes[j++];
//			}
//
//			KeySpec keySpec;
//			SecretKey key;
//			IvParameterSpec iv;
//
//			keySpec = new DESedeKeySpec(keyBytes);
//
//			key = SecretKeyFactory.getInstance("DESede")
//					.generateSecret(keySpec);
//
//			iv = new IvParameterSpec(ivString.getBytes());
//
//			String passwordEnc = encrypt(text, key, iv);
//			String passwordDec = decrypt(passwordEnc, key, iv);
//
//			System.out.println("Plain Text : " + text);
//			System.out.println("Encrypted : " + passwordEnc);
//			System.out.println("Decrypted : " + passwordDec);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//
//	}
}
